/**
 * 表单验证工具函数
 */

// 验证邮箱格式
export const validateEmail = (email) => {
  const reg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
  return reg.test(email)
}

// 验证密码强度
export const validatePassword = (password) => {
  // 密码必须包含数字和字母，长度6-20位
  const reg = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,20}$/
  return reg.test(password)
}

// 获取密码强度级别
export const getPasswordStrength = (password) => {
  if (!password) return 0
  
  let strength = 0
  
  // 长度检查
  if (password.length >= 6) strength += 1
  if (password.length >= 10) strength += 1
  
  // 包含数字
  if (/\d/.test(password)) strength += 1
  
  // 包含小写字母
  if (/[a-z]/.test(password)) strength += 1
  
  // 包含大写字母
  if (/[A-Z]/.test(password)) strength += 1
  
  // 包含特殊字符
  if (/[^A-Za-z0-9]/.test(password)) strength += 1
  
  return Math.min(strength, 5) // 最高5级
}

// Element Plus 表单验证规则
export const formRules = {
  // 邮箱验证规则
  email: [
    { required: true, message: '请输入邮箱地址', trigger: 'blur' },
    { validator: (rule, value, callback) => {
      if (!validateEmail(value)) {
        callback(new Error('请输入有效的邮箱地址'))
      } else {
        callback()
      }
    }, trigger: 'blur' }
  ],
  
  // 密码验证规则
  password: [
    { required: true, message: '请输入密码', trigger: 'blur' },
    { min: 6, max: 20, message: '密码长度应为6-20个字符', trigger: 'blur' },
    { validator: (rule, value, callback) => {
      if (!validatePassword(value)) {
        callback(new Error('密码必须包含数字和字母'))
      } else {
        callback()
      }
    }, trigger: 'blur' }
  ],
  
  // 确认密码验证规则
  confirmPassword: [
    { required: true, message: '请再次输入密码', trigger: 'blur' },
    { validator: (rule, value, callback, source) => {
      if (value !== source.password) {
        callback(new Error('两次输入的密码不一致'))
      } else {
        callback()
      }
    }, trigger: 'blur' }
  ]
}